import child from '../relation/child'
import { injectStore } from 'ee-vuex'

/** 选项的 emits 事件 */
export const emits = {
  /** 选中状态发生变化时触发
   * @param {boolean} checked - 当前选中的状态
   * @param i - 组件当前实例
   */
  onChange: (checked, i) => true,
  /** 选中状态变成选中时触发
   * @param i - 组件当前实例
   */
  onCheck: (i) => true,
}

export default injectStore({
  mixins: [child],
  inject: ["updateValue"],
  emits,
  props: {
    /** 选中时传递给父容器的v-model值，相同父容器中value值重复将会一并被选中 */
    value: null,
    /** radio: 已经选中时，是否可以点击重新选中以激活check事件
     * checkbox: 是否是全选按钮
     */
    special: Boolean,
    /** 是否选中 */
    checked: {
      type: Boolean,
      set(value, set) {
        set(value);
        this.$emit("change", value, this);
        if (value)
          this.$emit("check", this);
        this.updateValue?.(this.value??this, value);
      }
    },
  },
  methods: {
    /** 点击事件的操作 */
    click() {
      if (this.checked) {
        if (this.special) {
          this.$emit("check", this);
        }
      } else {
        this.checked = true;
      }
    }
  },
  watch: {
    value(value) {
      if (this.parent)
        this.checked = this.parent.modelValue == value;
    }
  }
})